
/* $Id: edilana.h 14 2009-12-30 10:53:21Z calicant $ */


#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

#ifdef __APPLE__
#define __unix__ 1
#endif

#ifdef __AROS__
#undef __unix__
#define AMIGA
#endif


#ifdef __amigaos4__

#include <exec/types.h>
#include <proto/locale.h>
#include <libraries/locale.h>
#endif

#define CATCOMP_NUMBERS
#define CATCOMP_ARRAY

#define __USE_INLINE__
#define __USE_BASETYPE__



#ifndef AMIGA
#define EXEC_TYPES_H
typedef unsigned long LONG; 
typedef const char *CONST_STRPTR;
typedef char *STRPTR;
#define STATIC static
#define CONST const
#endif


#include "messaggi.h"

/*----- Nomi dei file di supporto */
#define NOMELOG     "EdilAna.log"
#define VOCABOLARIO "osceno.the"
#define LISTANOMI   "nomiana.lst"
#define VOCABNOMI   "nomi.the"
#define ALTROVOCAB  "vocab.the"
#define LEMMARIO    "lemmi.the"

#define CONFIGFILE  "EdilAna.cfg"

extern char NOMECANDI[], NOMERESTO[], NOMEANAGS[], NOMENOMIB[],
    ALTRECANDI[], ALTRORESTO[], ALIASCANDI[], TEMPFILE[],
    LemmaCandy[];

#define NOMECANDI_DEF   "candi.tmp"
#define NOMERESTO_DEF   "resto.tmp"
#define NOMEANAGS_DEF   "anags.tmp"
#define NOMENOMIB_DEF   "nomib.tmp"
#define ALTRECANDI_DEF  "candiii.tmp"   /* per il vocabolario esterno */
#define ALTRORESTO_DEF  "restoii.tmp"
#define ALIASCANDI_DEF  "aliascan.tmp"  /* per la ricerca pseudonimi */
#define LEMMACANDY_DEF  "lemcandy.tmp"
#define TEMPFILE_DEF    "Edilxxxx.tmp"

/*----- Costanti varie */
#define MAXLLEMMA     20 /* Max lungh. di lemmi[], radici */
#define MAXLNOME      31 /* Max lungh. di nomi e cognomi */
#define MAXSTRLEN    256 /* Max lungh. di stringa */
#define MAXWORDS     500 /* Max candidate su cui ricercare anagrammi */
#define MAXNOMI     1000 /* Max nomi in lista esterna */
#define ON        -1
#define OFF        0
#define LINEA       "-------------------------------"
#define PUNTINI     "..............................."

/*----- Dimensioni dello schermo */
#define NUMCOLONNE    78 /* Numero di colonne */
#ifdef AMIGA
#define NUMRIGHE      25 /* Numero di righe */
#else
#define NUMRIGHE      22
#endif

#define COLORE_MIN    30
#define COLORE_MAX    38

/*----- Inzio e numero dei caratteri alfanumerici minuscoli ASCII */
#define NUMALFA       26
#define INIZALFA      97

/*----- Modi di auto ricerca sul resto */
enum {AUTO_R = 1, AUTO_S = 2, AUTO_P = 4};

/*----- Codici di errore e messaggi */

/* ora questi vengono forniti dal catalogo
enum {  NON_CONOSCO, COMANDO_ERRATO, INTACCA_FISSA, TROVATO_POCO,
    NON_RESTO, MANCA_MEMORIA, NOME_COGNOME, CIAO, NO_STRINGA,
    BUON_GIORNO, NUMERO_COMANDI_ERR, NO_ALFABETICI, COMANDO_DOPPIO,
    CONFIG_ERROR, CREO_LOGFILE, LEMMA_PRESENTE, LEMMA_NON_PRESENTE,
    AL_COMPLETO, TROPPO_CORTO, NON_NOMI, SOLO_CIFRE, FUORI_LISTA,
    NOME_LUNGO, MANCA_NOME, MANCA_LISTA_NOMI, NO_PATH_IN_LOG,
    NO_CON, MANCA_VOCAB, TROVATO_CONFIGFILE, ERR_IN_CONFIGFILE,
    COMANDO_ESTERNO, FONDO_CANDI
};
*/

/*----- Comandi */
enum    {
    ANAGRAMMA,   AIUTO,       VEDI_IN_LOG, USCITA,     SUL_RESTO,
    FISSA_LEMMA, NUOVO_VOC,   AUTO_RESTO,  AGGIUNGI,   TOGLI,
    SOSTITUISCI, NUOVO_LEMMA, ANAG_IN_LOG, NUOVA_BASE, UNDO,
    VEDI_CAND,   VEDI_VAR,    NUOVO_LOG,   NOMI_BUONI, LISTA_NOMI,
    WILD_CANDI,  WILD_RESTO,  COMMENTO_LOG, CANDY,     AUTO_ANAG,
    CMD_EXT
};



/*----- Nome e sua firma */
struct FirmaNome {
    char *nome;
    int  *tabe;
};

struct Setup {
    char tempdir    [MAXSTRLEN];
    char logfile    [MAXSTRLEN];
    char vocabolario[MAXSTRLEN];
    char listanomi  [MAXSTRLEN];
    char vocabnomi  [MAXSTRLEN];
    char altrovocab [MAXSTRLEN];
    char lemmario   [MAXSTRLEN];
    char comando    [MAXSTRLEN];
    int  colorprompt;
    int  promptora;
    int  coloresto;
    int  numcolonne;
    int  numrighe;
    int  modor;
    int  datalog;
    int  random;
    char nomecognome[MAXSTRLEN];
    int  nome;
    int  minlenw;
    int  minlencandy;
    int  truncandy;
    int  autofusione;
    int  stampacandy;
    int  autocandy;
    char configfile[MAXSTRLEN];
    int  configflag;
    char sortcmd[MAXSTRLEN];
    char uniqcmd[MAXSTRLEN];
    char catcmd[MAXSTRLEN];
    char anagcmd[MAXSTRLEN];
};


/*----- Uso di funzioni Amiga in luogo di quelle standard */
#ifdef AMIGA
/*#define remove DeleteFile*/
/*#define rename Rename*/
#endif

/*----- Prototipi delle funzioni */

char *spazioStringa (char *);
 int *spazioVettore (int []);
 int CostruisciTabella (struct FirmaNome *[], char *, int, int);
void LiberaMemoria (struct FirmaNome *[], int);
 int IOFail (FILE *, FILE *);
FILE *IOFile (char *, char *);
 int Stripnl (char *);
 int Stringa2Cifra (char *, int);
 int AbbastanzaLunga (char *, int);
void Inverte (char *);

#ifdef AMIGA
void StampaFast (int);
/*long DeleteFile (char *);*/

/*
 * usiamo il rename standard per muovere i file (sotto UNIX funziona)
 */
/* long Rename (char *, char *);*/
/*extern struct DosLibrary *DOSBase;*/
/*#pragma libcall DOSBase DeleteFile 48 101*/
/*#pragma libcall DOSBase Rename 4e 2102 */
#endif


void DataOra (int []);
void IoDico (int);
void Version (void);
void Uscita (int);
void Help (char *, char *);

 int Pulisci (unsigned char *);
 int StringaBase (char *, int []);
 int Sottraz (int [], char *, char *, int, int);
 int CercaCandidate (int [], char *, char *, int *, int);
void StampaCol (char *, int, int [], int, int, int, char *);

 int VediCandidate (char *, int [], int, int, int);
 int Candy (char *, char *, int, int, int [], char *, int *, int *);

void WildCandi (char *, char, char, int);
void Permuta (char *);
void SettaLogfile (char *, int []);
void Statistiche (int [], int [], int[]);
 int Incipit (int, char *[], char *, int [],
    int *, int *, struct FirmaNome *[], int [],
          int *);

int ConfigfileSetup (char *);

 int AggiungiTogli (char *, char *, int, char *, char *);
 int CalcAnagrammi (int [], char *, int, char *, int);
 int AutoAnagrammi (char *, int);
 int GiocaSulResto (char *, char *, int []);
void MostrAnaInLog (char *, char *, char *);
 int InsTogliVocab (char *, char *, int);
 int InsertLog (char *, char *, char *, int);
void CommentoInLog (char *, char *);
 int NomiBuoni (char *, struct FirmaNome *[], int);
 int UsaListaNomi (struct FirmaNome *[], int *, char *, char []);
void StampaVarProg (int, char *, int, char *, int, int,
    int, int, int [], int);
void StampaAuguri (void);
 int LineEdit (char *, char *, int);
void printTotCandi (char *, int);
void printStats (int [], int [], int, int);
void printSubError();

#ifdef AMIGA
unsigned char tasto ();
#else
 char tasto (void);
#endif

#ifdef PASSWORD
int TestaPassword (char *);
#endif
